package com.kuqi.blog.util;

import com.kuqi.blog.dao.pojo.SysUser;

/**
 * @author:kuqi
 * @createTime:2021/12/16 9:47
 * @description:
 *  ThreadLocal本地线程，可以保存以及登录等用户信息，使用ThreadLocal代替session完成保存用户信息功能。
 *  好处是可以在同一线程中很方便的获取用户信息，不需要频繁的传递session对象。
 *
 * 实现流程：在登录业务代码中，当用户登录成功时，生成一个登录凭证存储到redis中，将凭证中的字符串保存在cookie中返回给客户端。
 *          使用一个拦截器拦截登录请求，从cookie中获取凭证字符串与redis中的凭证进行匹配，获取用户信息，
 *          将用户信息存储到ThreadLocal中，在本次请求中持有用户信息，即可在后续操作中使用到用户信息。
 */
public class UserThreadLocal {
    //私有无参构造函数，表示该类不可以被其他类实例化
    private  UserThreadLocal(){}

    //线程变量隔离，每个线程拥有一个线程块，用于存储该线程中的数据，与其他线程不共享数据。
    private static final ThreadLocal<SysUser> local = new ThreadLocal<>();

    public  static void put(SysUser sysUser){
        local.set(sysUser);
    }

    public  static SysUser get(){
        return local.get();
    }

    public  static void remove(){
        local.remove();
    }

}
